from django.db import models
from django.utils import timezone

from list.models import Course
from login.models import User
from utils.models import BaseModel


# Create your models here.



# 创建订单表-->订单总表和订单详情表
# 是这样的：订单详情表关联订单总表
# 订单详情表是具体购物车中有几件商品(来自于不同的店家)你要把他进行分割，每个订单发送至不同的店家让他们进行发货
# 订单总表是：这次下单的总金额，总商品，订单号，下单时键，是代表这一次下单的总数据

class Order(BaseModel):
    STATUS = (
        (0,'未支付'),
        (1,'已支付'),
        (2,'已取消'),
        (3,'超时取消')
    )
    pay_method = models.IntegerField(default=2,choices=((1, '支付宝'), (2, '微信')),verbose_name='支付方式')
    use_coupon = models.BooleanField(default=False,verbose_name='是否使用优惠券')
    use_coupon_id = models.IntegerField(default=0,null=True,blank=True,verbose_name='优惠券ID')
    total_price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='订单总价')
    real_price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='实付金额')
    order_status = models.IntegerField(default=0,choices=STATUS,verbose_name='订单状态')
    # 订单号使用雪花算法 生成唯一订单号
    order_number = models.CharField(max_length=100,verbose_name='订单编号')
    order_desc = models.CharField(max_length=500,verbose_name='订单备注')
    order_time = models.DateTimeField(auto_now_add=True,verbose_name='下单时间')
    pay_time = models.DateTimeField(verbose_name='支付时间',null=True,blank=True)
    trade_no = models.CharField(max_length=100,verbose_name='支付流水号',null=True,blank=True)
    user = models.ForeignKey(User, on_delete=models.DO_NOTHING, verbose_name='用户')

    class Meta:
        db_table = 'tb_order'


class OrderDetail(BaseModel):
    # 一张订单大表里会有很多小的商品订单详情，但这一个商品的下单详情 只属于这一时刻下单的 这一张大表
    order = models.ForeignKey(Order,on_delete=models.CASCADE,verbose_name='订单总表外键')
    course = models.ForeignKey(Course,on_delete=models.DO_NOTHING,verbose_name='课程外键')
    price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='课程价格')
    expire_days = models.IntegerField(verbose_name='课程有效期(天数)')
    expire_text = models.CharField(max_length=100,verbose_name='课程有效期说明文本',default='默认有效期30天')
    expire_time = models.DateTimeField(verbose_name='课程过期时间',blank=True,null=True)
    # 这个过期时间是通过计算出来的：这个商品的创建时间created_time + 课程的有效期(天数)
    order_number = models.CharField(max_length=100,verbose_name='订单编号')
    # 这是这个商品的订单编号

    class Meta:
        db_table = 'tb_order_detail'


    # 重写save保存，修改方法
    def save(self, *args, **kwargs):
        # 目的:保存时自动填充订单号，两张标的订单号是一致的
        if not self.order_number and self.order:
            # 如果订单已生成，但订单编号为空
            self.order_number = self.order.order_number
            # 两张变的订单号一致
        super().save(*args, **kwargs)






